home *** CD-ROM | disk | FTP | other *** search
/ Acorn RISC PD-CD 1 / Acorn RISC PD-CD 1.iso / languages / dde / _pc / h / drawfobj < prev    next >
Text File  |  1992-02-09  |  11KB  |  277 lines

  1. (* 
  2.  * Title:   drawfobj.h
  3.  * Purpose: Processing of Draw format files (object level interface)
  4.  *
  5.  *)
  6.  
  7. (*
  8.  *
  9.  * This file supplements the diagram level interface with routines for
  10.  * dealing with individual objects.
  11.  *)
  12.  
  13. #ifndef __drawfobj_h
  14. #define __drawfobj_h
  15.  
  16. (* Data types for specifying object details *)
  17. #ifndef __drawfdiag_h
  18. #include "h.drawfdiag"
  19. #endif
  20. #ifndef __drawftypes_h
  21. #include "h.drawftypes"
  22. #endif
  23.  
  24.  
  25. (******************************** DATA TYPES *******************************)
  26.  
  27. (* 
  28.  * Data type for specifying the full details of any object type.
  29.  * It is used in operations on complete objects, such as creation
  30.  * and querying, and so does not include the types needed for
  31.  * contained structures and types, such as path elements or text
  32.  * columns : those are defined in h.drawftypes.
  33.  *
  34.  *)
  35.  
  36. type draw_objectType_tag = 0..9;
  37.      draw_objectType_ptr = ^draw_objectType;
  38.      draw_objectType =
  39.        record
  40.          object : draw_objhdr_ptr;
  41.          fileHeader : draw_fileheader_ptr;
  42.          fontlist : draw_fontliststr_ptr;
  43.          text : draw_textstr_ptr;
  44.          path : draw_pathstr_ptr;
  45.          sprite : draw_spristr_ptr;
  46.          group : draw_groustr_ptr;
  47.          textarea : draw_textareahdr_ptr;
  48.          bytep : ^byte;
  49.          wordp : ^integer
  50.        end;
  51.  
  52.  
  53. (* Symbolic code for no object *)
  54.  
  55. const   draw_NoObject = draw_object(-1);
  56.  
  57.  
  58. (* 
  59.  * For functions that operate on a range of objects (and ONLY those 
  60.  * functions), the following special codes may be used to mean 'from the
  61.  * start' and 'to the end'.
  62.  *
  63.  *)
  64.  
  65. const   draw_FirstObject = draw_object(-1);
  66.         draw_LastObject  = draw_object(-2);
  67.  
  68.  
  69.  
  70. (********************************* Global data *****************************)
  71. (* An array of 256 integers, used for font translation. Immediately after 
  72.  * a call to draw_createObject where the object was a font table, this 
  73.  * contains the mapping between old and new font reference numbers, such 
  74.  * that  transTable[old fontref] = new fontref.
  75.  * draw_translateText makes use of this table; it is exported for
  76.  * callers who may want to do something elaborate.
  77.  *)
  78.  
  79. var draw_transTable : ^integer; extern;
  80.  
  81. (************************** Interface functions ****************************)
  82.  
  83.  
  84. (* --------------------------- draw_create_diag ----------------------------
  85.  * Description:   Create an empty diagram (ie. just the file header), with
  86.  *                a given bounding box.
  87.  *
  88.  * Parameters:    draw_diag *diag -- pointer to store to hold diagram
  89.  *                char *creator -- pointer to character string holding
  90.  *                                 creator's name
  91.  *                draw_box bbox -- the bounding box (in Draw units).
  92.  * Returns:       void.
  93.  * Other Info:    diag must point at sufficient memory to hold the diagram.
  94.  *                The first 12 chars of creator are stored in the file
  95.  *                header. diag.length is set appropriately by this function.
  96.  *
  97.  *)
  98. procedure draw_create_diag(diag : draw_diag_ptr;
  99.                 creator : string;
  100.                 bbox : draw_bboxtyp); extern;
  101.  
  102.  
  103. (* -------------------------- draw_doObjects -------------------------------
  104.  * Description:   Render a specified range of objects from a diagram.
  105.  *
  106.  * Parameters:    draw_diag *diag -- the diagram
  107.  *                draw_object start -- start of range of objects to be
  108.  *                                     rendered
  109.  *                draw_object end   -- end of range of objects to be rendered
  110.  *                draw_redrawstr *r -- WIMP-style redraw rectangle
  111.  *                double scale -- the scale factor for rendering
  112.  *                draw_error *error -- possible error condition.
  113.  * Returns:       TRUE if render was successful.
  114.  * Other Info:    Parameters (except range) are used as in draw_render_diag,
  115.  *                in diagram level module.
  116.  *                The diagram must be verified before a call to this function
  117.  *                If the range of objects inclues text with anti-aliasing
  118.  *                fonts, you MUST call draw_setFontTable first.
  119.  *                Very small (<0.00009) or negative scale factors will cause
  120.  *                run-time errors.
  121.  *
  122.  *)
  123. function draw_doObjects(diag : draw_diag_ptr;
  124.                 start : draw_object;
  125.                 _end : draw_object;
  126.                 r : draw_redrawstr_ptr;
  127.                 scale : real;
  128.                 var error : draw_error) : boolean; extern;
  129.  
  130.  
  131. (* -------------------------- draw_setFontTable ----------------------------
  132.  * Description:   Scans a diagram for a font table object and records it for
  133.  *                a subsequent call of draw_doObjects.
  134.  *
  135.  * Parameters:    draw_diag *diag -- the diagram to be scanned.
  136.  * Returns:       void.
  137.  * Other Info:    This function must be called for draw_doObjects to work on 
  138.  *                a sequence of objects that includes text objects using
  139.  *                anti-aliasing fonts, but no font table object. The font
  140.  *                table remains valid until either a different one is 
  141.  *                encountered during a call to draw_doObjects, or until
  142.  *                draw_render_diag is called, or until a different diagram
  143.  *                is rendered.
  144.  *
  145.  *)
  146. procedure draw_setFontTable(diag : draw_diag_ptr); extern;
  147.  
  148.  
  149. (* -------------------------- draw_verifyObject ----------------------------
  150.  * Description:   Verify the data for an existing object in a diagram
  151.  *
  152.  * Parameters:    draw_diag *diag -- the diagram
  153.  *                draw_object object -- the object to be verified
  154.  *                int *size -- gets set to the amount of memory occupied by
  155.  *                             the object.
  156.  *                draw_error *error -- possible error condition.
  157.  * Returns:       TRUE if object found and verified.
  158.  * Other Info:    Verifying an object ensures that its bounding box is
  159.  *                consistent with the data in it; if not, no error is
  160.  *                reported, but the box is made consistent, On an error, the
  161.  *                location is relative to the start of the diagram.
  162.  *                Note: the object's size is only returned if "size" is a
  163.  *                non-null pointer.
  164.  *
  165.  *)
  166. function draw_verifyObject(diag : draw_diag_ptr;
  167.                 object : draw_object;
  168.                 var size : integer;
  169.                 var error : draw_error) : boolean; extern;
  170.  
  171.  
  172. (* -------------------------- draw_createObject ----------------------------
  173.  * Description:   Creates an object after a specified object in a given
  174.  *                diagram.
  175.  *
  176.  * Parameters:    draw_diag *diag -- the diagram
  177.  *                draw_objectType newObject -- the created object
  178.  *                draw_object after -- the object after which the new object
  179.  *                                     should be created
  180.  *                BOOL rebind -- if TRUE, the bounding box of the diagram is
  181.  *                               updated to the union of its existing value
  182.  *                               and that of the new object
  183.  *                draw_object *object -- new object's handle
  184.  *                draw_error *error -- possible error condition
  185.  * Returns:       TRUE if object was created OK
  186.  * Other Info:    All data after the insertion point is moved down. "after"
  187.  *                may be set to draw_FirstObject/draw_LastObject for
  188.  *                inserting at the start/end of the diagram.
  189.  *                Diagram must be large enough for the new data; its length
  190.  *                field is updated.
  191.  *                On an error, the location is not meaningful.
  192.  *                The handle of the new object is returned in "object"
  193.  *                If this function is used to create a font table, "after" 
  194.  *                is ignored, and the object merged with the existing one
  195.  *                (if such exists) or inserted at the start of the diagram
  196.  *                otherwise.  This can cause the font reference numbers to
  197.  *                change; if a call to this function is followed by a 
  198.  *                draw_translateText(), the font change will be applied (only
  199.  *                needed when anti-aliased fonts are used in text objects.
  200.  *                
  201.  *)
  202. function draw_createObject(diag : draw_diag_ptr;
  203.                 new_Object : draw_objectType;
  204.                 after : draw_object;
  205.                 rebind : boolean;
  206.                 object : draw_object_ptr;
  207.                 var error : draw_error) : boolean; extern;
  208.  
  209.  
  210. (* ---------------------------- draw_deleteObjects -------------------------
  211.  * Description:   Deletes the specified range of objects from a diagram.
  212.  *
  213.  * Parameters:    draw_diag *diag -- the diagram
  214.  *                draw_object start -- start of range of objects to be
  215.  *                                     deleted
  216.  *                draw_object end   -- end of range of objects to be deleted
  217.  *                BOOL rebind -- if set to TRUE, then the diagram's bounding
  218.  *                               box will be set to the union of those 
  219.  *                               remaining objects
  220.  *                draw_error *error -- possible error condition.
  221.  * Returns:       TRUE if objects deleted successfully.
  222.  * Other Info:    diag.length is updated appropriately.
  223.  *
  224.  *)
  225. function draw_deleteObjects(diag : draw_diag_ptr;
  226.                 start : draw_object;
  227.                 _end : draw_object;
  228.                 rebind : boolean;
  229.                 var error : draw_error) : boolean; extern;
  230.  
  231.  
  232. (* ----------------------- draw_extractObject ------------------------------
  233.  * Description:   Extracts an object from a diagram into a supplied buffer
  234.  *
  235.  * Parameters:    draw_diag *diag -- the diagram
  236.  *                draw_object object -- the object to be extracted
  237.  *                draw_objectType result -- pointer to the buffer
  238.  *                draw_error *error -- possible error division
  239.  * Returns:       TRUE if the object was extracted successfully.
  240.  * Other Info:    The buffer for the result must be large enough to hold
  241.  *                the extracted object (an object's size can be ascertained
  242.  *                by calling draw_verifyObject()).
  243.  *
  244.  *)
  245. function draw_extractObject(diag : draw_diag_ptr;
  246.                 object : draw_object;
  247.                 result : draw_objectType;
  248.                 var error : draw_error) : boolean; extern;
  249.  
  250.  
  251. (* -------------------------- draw_translateText ---------------------------
  252.  * Description:   Updates all font reference numbers for text objects
  253.  *                following creation of a font table.
  254.  *
  255.  * Parameters:    draw_diag *diag -- the diagram.
  256.  * Returns:       void.
  257.  * Other Info:    If the font table has not been changed then this function
  258.  *                does nothing.
  259.  *
  260.  *)
  261. procedure draw_translateText(diag : draw_diag_ptr); extern;
  262.  
  263.  
  264. (* -------------------------- drawfobj_init --------------------------------
  265.  * Description:   Initialise the object level interface
  266.  *
  267.  * Parameters:    void
  268.  * Returns:       TRUE if all went OK.
  269.  * Other Info:    none
  270.  *
  271.  *)
  272. function drawfobj_init : boolean; extern;
  273.  
  274. #endif
  275.  
  276. (* end drawfobj.h *)
  277.